package com.example.software.service;

import com.example.software.dto.TaskDTO;
import com.example.software.vo.TaskVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

public interface TaskService {
    
    /**
     * 创建任务
     * @param taskDTO 任务信息
     * @param userId 用户ID
     * @param userType 用户类型
     * @return 任务ID
     */
    Long createTask(TaskDTO taskDTO, Long userId, String userType);
    
    /**
     * 获取任务列表
     * @param userId 当前用户ID
     * @return 任务列表
     */
    List<TaskVO> getTaskList(Long userId);
    
    /**
     * 获取任务详情
     * @param taskId 任务ID
     * @param userId 当前用户ID
     * @return 任务详情
     */
    TaskVO getTaskDetail(Long taskId, Long userId);
    
    /**
     * 撤销任务
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean cancelTask(Long taskId, Long userId);
    
    /**
     * 申请任务
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean applyTask(Long taskId, Long userId);
    
    /**
     * 取消申请任务
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean cancelApplyTask(Long taskId, Long userId);
    
    /**
     * 接受申请
     * @param applicationId 申请ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean acceptApplication(Long applicationId, Long userId);
    
    /**
     * 拒绝申请
     * @param applicationId 申请ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean rejectApplication(Long applicationId, Long userId);
    
    /**
     * 完成任务
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean completeTask(Long taskId, Long userId);
    
    /**
     * 终止任务
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean terminateTask(Long taskId, Long userId);
    
    /**
     * 获取任务统计数据
     * @param userId 用户ID
     * @return 统计数据
     */
    Map<String, Object> getTaskStatistics(Long userId);
    
    /**
     * 获取任务状态分布
     * @param userId 用户ID
     * @return 状态分布
     */
    Map<String, Integer> getTaskStatusDistribution(Long userId);
    
    /**
     * 获取任务类型分布
     * @param userId 用户ID
     * @return 类型分布
     */
    Map<String, Integer> getTaskTypeDistribution(Long userId);
    
    /**
     * 获取任务薪资趋势
     * @param userId 用户ID
     * @param period 时间周期，如 7days, 30days, 3months, 1year
     * @return 薪资趋势数据
     */
    List<Map<String, Object>> getTaskSalaryTrend(Long userId, String period);
    
    /**
     * 获取任务完成率统计
     * @param userId 用户ID
     * @param range 时间范围，如 7days, 30days, all
     * @return 完成率统计数据
     */
    List<Map<String, Object>> getTaskCompletionStats(Long userId, String range);
    
    /**
     * 获取任务地区分布
     * @param userId 用户ID
     * @return 地区分布数据
     */
    Map<String, Integer> getTaskLocationDistribution(Long userId);
    
    /**
     * 零工标记任务为已完成
     * @param taskId 任务ID
     * @param userId 零工用户ID
     * @return 是否成功
     */
    boolean workerCompleteTask(Long taskId, Long userId);
    
    /**
     * 管理员删除任务
     * @param taskId 任务ID
     * @return 是否成功
     */
    boolean adminDeleteTask(Long taskId);
    
    /**
     * 处理上传的分析数据文件
     * @param file 上传的文件
     * @return 处理结果
     */
    Map<String, Object> processAnalyticsData(MultipartFile file);
    
    /**
     * 获取管理员统计数据
     * @return 统计数据
     */
    Map<String, Object> getAdminStatistics();
} 